package com.bzkj.document.service.materialsoutbound;

import com.bzkj.common.core.domain.AjaxResult;
import com.bzkj.common.core.domain.model.LoginUser;
import com.bzkj.common.core.page.TableDataInfo;
import com.bzkj.common.domain.NccRequestDTO;
import com.bzkj.document.domain.DocConfirmDTO;
import com.bzkj.document.domain.materialout.dto.IcMaterialRequest;
import com.bzkj.document.domain.materialout.dto.MaterialOutboundDTO;

import java.util.HashMap;

/**
 * @projectName: prt-wms
 * @package: com.bzkj.document.service.materialsoutbound
 * @className: MaterialOutboundService
 * @description: 材料出库单服务层接口
 * @author: C1309
 * @createDate: 2024年12月09日
 * @version: v1.0
 */
public interface MaterialOutboundService {

    /**
     * 查询NCC材料出库单
     *
     * @param nccRequestDTO 请求参数
     * @return 查询结果
     */
    TableDataInfo selectMaterialOutboundOrder(NccRequestDTO nccRequestDTO);


    /**
     * 材料出库单签字
     *
     * @param cgeneralhid  单据头主键
     * @param loginUser 登录用户
     * @return 操作结果
     */
    AjaxResult signatureMaterialOutBound(String cgeneralhid, LoginUser loginUser);

    /**
     * 修改材料出库单
     *
     * @param responseBody 请求参数
     * @param loginUser 登录用户信息
     * @param isSign 是否跳过校验
     * @return 操作结果
     */
    AjaxResult updateMaterialOutBoundOrder(HashMap<String, Object> responseBody, LoginUser loginUser, boolean isSign);

    /**
     * 新增材料出库单
     *
     * @param icMaterialRequest 单据数据
     * @return 操作结果
     */
    AjaxResult addMaterialOutboundOrder(IcMaterialRequest icMaterialRequest);

    /**
     * 确认NCC材料出库单
     *
     * @param docConfirmDTO 请求参数
     * @return 操作结果
     */
    AjaxResult confirmOutboundOrder(DocConfirmDTO docConfirmDTO);

    /**
     * 查询本地已经确认的材料出库单据
     *
     * @param materialOutboundDTO 查询条件
     * @param pageNum             当前页
     * @param pageSize            每页显示条数
     * @return 查询结果
     */
    TableDataInfo selectLocalMaterialOutboundOrder(MaterialOutboundDTO materialOutboundDTO, int pageNum, int pageSize);

    /**
     * 材料出库单回退至未提取状态
     * @param headerId 单据表头主键
     * @param loginUser 登录用户信息
     * @return 操作结果
     */
    AjaxResult orderBack(String headerId, LoginUser loginUser);

    /**
     * 更新库存
     * @param headerId 表头主键
     * @param loginUser 登录用户
     * @return 操作结果
     */
    AjaxResult updateInventory(String headerId, LoginUser loginUser);

    /**
     * 删除材料出库单
     *
     * @param header 表头主键
     * @param loginUser 登录用户
     * @param reason 作废原因
     * @return 操作结果
     */
    AjaxResult deleteMaterialOutboundOrder(String header, LoginUser loginUser, String reason);
}
